local ClientOHOH = _G.ClientOHOH;

local M = ClientOHOH.class.new(script, ClientOHOH.files.OHOHOLYBUIBase());
local CallBackManager = ClientOHOH.load.CallBackManager();
local ConnectClass=_G.CommonOHOH.load.Connect();
local TweenHelper = _G.CommonOHOH.load.TweenHelper();
local BtnHelper = ClientOHOH.load.BtnHelper();

local PetTool=_G.CommonOHOH.load.PetTool();

local gColor=require(script.Color).new()
local gTip=ClientOHOH.load.UIManager():CreateUI("PetTip",require(script.PetTip))

function InitInsts(ui)
	ui.insts = {
        btn="ctrl.btn",--按钮
        viewPort="ctrl.ViewportFrame",-- 放置模型
        equipIcon="ctrl.equipIcon",--装备小图标
        deleteIcon="ctrl.delete",--激活图标
        lockIcon="ctrl.lock",--锁定小图标
        powerText="ctrl.power",--力量小图标
        star1="ctrl.star1",--等级2
        star2="ctrl.star2",--等级3
        active="ctrl.active",--激活图标
    };

end;

-- local instStr={
--     btn="ctrl.btn",--按钮
--     viewPort="ctrl.ViewportFrame",-- 放置模型
--     equipIcon="ctrl.equipIcon",--装备小图标
--     deleteIcon="ctrl.delete",--激活图标
--     lockIcon="ctrl.lock",--锁定小图标
--     powerText="ctrl.power",--力量小图标
--     star1="ctrl.star1",--等级2
--     star2="ctrl.star2",--等级3
--     active="ctrl.active",--激活图标
-- }
function M.new(...)
	return M(...);
end;



local tw1 = TweenInfo.new(0.3, Enum.EasingStyle.Sine,Enum.EasingDirection.Out);

local cellPerfab=ClientOHOH:GetPath_Loop("ReplicatedStorage.Resource.UI.PetCell")
function M.RoationModel(self,v)
    TweenHelper:PlayTween(self.AniamtionValue, tw1, {
        Value =v
    });
end

--参数：
--petId：宠物Id
--guid:cell的唯一Id
--parent:cell所在父节点
--dataBase：玩家数据库

function M.ctor(self,petId,guid,parent,database)
    InitInsts(self)
    M.super.ctor(self, cellPerfab:Clone())
 
    self:SetParent(parent)
    self.main_inst.Visible=true
    self.petId=petId
    self.guid=guid
    self.ClickEvent=ConnectClass.new();  -- 卸载某个

    CallBackManager:AddRbxConnect(self,self.insts.btn.Activated, function()
        self.ClickEvent:Action(self)
	end);

     self.insts.btn.MouseEnter:Connect(function()
        self:MouseEnter()
	end)

	self.insts.btn.MouseLeave:Connect(function()
        self:MouseLeave()
	end)
    
    self.DataBase=database
    self.data=PetTool.GetPetDataByPetId(self.petId, self.DataBase:GetData("pets").had)
    self:init()

end;

function M.init(self)

    self.Model=PetTool.GetPetModelByPetId(self.petId)
    self.Model.Parent=self.insts.viewPort
    self.Model:SetPrimaryPartCFrame(self.insts.viewPort:WaitForChild("CF").Value)
    self.BoostStr=PetTool.GetBoostStrByPetId(self.petId)

    self.AniamtionValue= Instance.new("IntValue",self.Model)
    self.AniamtionValue.Value=0
    self.OriginalModelCF=self.Model:GetPrimaryPartCFrame()
    
    self.AniamtionValue.Changed:Connect(function(value)
        local cf=self.OriginalModelCF*CFrame.Angles(0,math.rad(value),0)
        self.Model:SetPrimaryPartCFrame(cf)
    end)

    self.insts.active.Visible=false
    self.insts.equipIcon.Visible=false
    self.insts.deleteIcon.Visible=false
    self.insts.lockIcon.Visible=false
    self.insts.powerText.Text=self.BoostStr
    self.insts.powerText.TextColor3=self:GetEvolutionColor3()
    self.insts.btn.BackgroundColor3=self:GetTitleColor3()
    self.main_inst.LayoutOrder=self.data.layoutOrder

    self:UpdateStar()

end

function M.dtor(self)
    self:ClearMouseEnter()
    local obj= self.main_inst
    -- self.main_inst:Destroy()
	M.super.dtor(self);
    obj:Destroy()
end;


function M.MouseEnter(self)
    self.AniamtionValue.Value=0
    self:RoationModel(45)
    gTip:Show(self)
end

function M.MouseLeave(self)
    self.AniamtionValue.Value=45
    self:RoationModel(0)
    gTip:Hide(self)
end

--********************************************************************************

--以下是接口

-------------各种标记----锁定，准备，选择，删除（售卖）------------------------------------------------
--设置选中状态(true,会出现红桃)
function M.SetSelectedStatus(self,isSelelct)
    self.insts.active.Visible=isSelelct
end

--设置装备状态
function M.SetEquipedStatus(self,isEquiped)
    self.insts.equipIcon.Visible=isEquiped
end

--设置显示状态（隐藏，或者显示）
function M.SetShowStatus(self,isShow)
    self.main_inst.Visible=isShow
end

--切换锁定标记
function M.ChangeLock(self)
    self.insts.lockIcon.Visible=not self.insts.lockIcon.Visible
end


--设置锁定状态
function M.SetLockStatusLock(self,isLock)
    self.insts.lockIcon.Visible=isLock
end

--清空鼠标移入状态
function M.ClearMouseEnter(self)
   self:MouseLeave()
end

--切换删除标记
function M.ChangeSell(self)
    self.insts.deleteIcon.Visible=not self.insts.deleteIcon.Visible
end

--设置售卖状态（删除）
function M.SetSellStatus(self,isSell)
    self.insts.deleteIcon.Visible=isSell
end

--是否锁定
function M.isLock(self)
    return  self.insts.lockIcon.Visible
end

--是否装备
function M.isEquiped(self)
    return  self.insts.equipIcon.Visible
end

--是否被选中
function M.isSelected(self)
    return self.insts.active.Visible
end

--是否在售卖中
function M.isSelling(self)
    return  self.insts.deleteIcon.Visible
end

function M.GetParent(self)
    return self.main_inst.Parent
end

function M.SetParent(self,parent)
    self.main_inst.Parent=parent
end
----------------标签End----------------------------


-----------------宠物信息相关-----------------------------
-- 获取段位颜色参数：段位Id
function M.GetEvolutionColor3ById(id)
    return gColor:GetEvolutionColor3(id)
end

--获取称号函数参数：称号Id
function M.GetTitleColor3ById(id)
    return  gColor:GetTitleColor3(id)
end

--获取自己的段位颜色
function M.GetEvolutionColor3(self)
    return M.GetEvolutionColor3ById( self.data.evolution)
end

--获取称号颜色
function M.GetTitleColor3(self)
    local c= M.GetTitleColor3ById(self.data.title)
    return c
end


--获取段位名字
function M.GetEvolutionName(self)
    return self.data.evolutionName
end
--获取称号名字
function M.GetTitleName(self)
    return self.data.titleName
end
--获取加成字符串
function M.GetBoostStr(self)
    return  self.BoostStr
end
--获取等级大小Id
function M.GetSizeId(self)
    return self.data.level
end
--获取等级名字
function M.GetSizeName(self)
    return self.data.level
end
--获取宠物名字
function M.GetPetName(self)
    return self.data.name
end
--获取宠物模型
function M.GetPetModel(self)
    return  self.Model
end

--能否被合成
function M.IsCanMerge(self)
     return PetTool.IsCanMerge(self.petId)
end

--能否被黄金
function M.IsCanGold(self)
    return  PetTool.IsCanGold(self.petId)
end

--能否被虚空
function M.IsCanVoid(self)
    return PetTool.IsCanVoid(self.petId)
end

------------------宠物信息-End--------------------------------------

----------------------其它接口--------------------------------

function M.GetGuid(self)
    return  self.guid
 end

function M.GetPetId(self)
   return  self.petId
end

--更新Size
function M.UpdateStar(self)
    self.insts.star1.Visible=false
    self.insts.star2.Visible=false
    if self.data.level==2 then
        self.insts.star1.Visible=true
    elseif  self.data.level==3  then
        self.insts.star1.Visible=true
        self.insts.star2.Visible=true
    end
end

-- 返回cell的绝对坐标
function M.GetAbsolutePosition(self)
    return self.main_inst.AbsolutePosition
end

--获取cell所在的ScreenGui
function M.GetRootGui(self)
    if not  self.RootGui then
        self.RootGui=self.main_inst:FindFirstAncestorOfClass("ScreenGui")
        if not self.RootGui then
            self.RootGui=self.main_inst:FindFirstAncestorOfClass("BillboardGui")
        end
    end
    return self.RootGui
end



return M